//php
#$
//json编码,true为数组,不带true为数组对象
$res = json_decode($res,true);
//json解码
  dump(json_encode($res));

#$
//判断字符串是否为数字
if( is_numeric( $num ) )
{
    echo $num.'是数字型';
}
#$
//可变函数
function show(){
echo "输出";
}
$ a="show";
$a();
#$
//函数参数引用赋值
$str="今天星期三";
function show(&$str){
$str="不上课";
return $str;
}
#$

web手册php
#$
//可变函数
function show(){
echo "输出";
}
$ a="show";
$a();
#$
//函数参数引用赋值
$str="今天星期三";
function show(&$str){
$str="不上课";
return $str;
}
#$
//静态局部变量
function show(){
static $sr='33'; //静态局部变量定义后执行一次后续执行不会执行.直到手动结束或脚本运行结束
}
$sr++;//执行一次加一
#$
//判断函数是否存在
function_exists('函数名')
if (!function_exists('show')){
echo "";
}
#$
//变量跨域访问
//借超全局变量
$str="666";
$_GET["str"]=$str;
function show(){
echo $_GET["str"];
}
show();
#$
//变量跨域访问
//借$GLOBALS
$str="666";
function show(){
echo $GLOBALS["str"];//不用赋值系统会查找到
}
show();
#$
//变量跨域访问
//借global关键词
$str="666";
function show(){
global str ;
echo $str;//global关键词修饰后可访问外部变量
}
show();
#$
//获取数组长度
count();//函数
#$
//递归
function show($n){
echo $n."<br/>";
if ($n<5){
show($n+1);
}
echo $n."<br/>";
}
show(1);
//说明:递归是一层一层执行函数调用函数;在if里执行函数4次;再一层一层结束继续执行下面代码
#$
//递归计算斐波那契数列公式.前两位的和等于后一位
function f($n){
if ($n==0){
return 0;
}
if ($n==1){
return 1;
}
return f($n-1)+f($n-2);
}
echo f(10);
#$
//foreach 数组遍历.建名可省略
$arr=["姓名"=>"刘备","姓名1"=>"关羽"];
foreach($arr as $key => $value){
echo $key ."=>".$value;
}
#$
//list数组读取,读取对应值,可以,号隔开跳过值
$arr=['刘备','关羽','张飞',''曹操"];
list($a,$b,,$c)=$arr;
echo $a;
#$
//跳出循环
break//结束循环
#$
//跳出循环
continue//跳过当前循环继续执行之后
#$
//删除数组或变量
unset($数组名)
#$
//遍历多维数组
$arr=[
['刘备',25,180],
['关羽',255,140],
['张飞',35,280],
['黄忠',45,800],
];
foreach($arr as $v){
echo '姓名'.$v[0].'年龄'.$v[1].'身高'.$v[2];
echo"</br>";
}
#$
//表格输出二维数组
$arr=[
['刘备',25,180],
['关羽',255,140],
['张飞',35,280],
['黄忠',45,800],
];

echo '<table border="1" width="600">';
echo '<tr><th>姓名</th><th>年龄</th><th>身高</th></tr>';
foreach($arr as $v){
echo '<tr>';
foreach($v as $v1){
echo "<td>$v1</td>";
}
echo'</tr>';
}
echo '</table>';
#$
//数组常用函数
//获取数组的值常用于格式化键名
$arr=["姓名"=>"刘备","姓名1"=>"关羽"];
$a=array_values($arr);
var_dump($a);
#$
//数组常用函数
//获取数组键名
$arr=["姓名"=>"刘备","姓名1"=>"关羽"];
$a=array_keys($arr);
var_dump($a);
#$
//数组键名和值互换
array_flip($arr);
#$
//检索数组中值是否存在
in_array(值,$arr);
#$
//检索数组中的值存在返回键名.否则返回false
array_search(值,$arr)
#$
//检索指定键名是否在数组中存在
array_key_exists(键,$arr)
#$
//创建一个指定范围单元的数组
range(5,8)
#$
//移除数组中重复的值,新的数组中会保留原来的键名
arrray_unique($arr)
#$
//返回一个单元顺序与原数组相反的数组,第二个参数为TRUE则保留原来的键名
array_reverse($arr,TRUE)
#$
//从数组中随机取出一个或多个元素的键
array_rand($arr,2)
#$
//将数组的顺序打款
shuffle($arr)
#$
//统计变量或数组长度
count($arr)
#$
//将多个数组合并
array_merge($a,$b..)
#$
//数学函数
//向上取整
ceil($变量)
#$
//向下取整
floor()
#$
//取随机数
rand(1,15)
#$
//日期函数
//设置时区
date_default_timezone_set('PRC');
#$
//获取1970年至当前时间截秒
time();
#$
//把时间截输出成可读形式.不用第二个参数默认格式化当前时间,
date('Y-m-d H:i:s',time()+5*24*3600);
#$
//cookie相关
//新增cookie
//cookie值只能是字符串,想要数组形式只能把COOKIE名改为数组形式
语法: cookie('cookie名','值',有效期);
 //时间默认为0
 示例:cookie('user','10',time());
 $arr=['张','李','王'];
 cookie('age[0]',$arr[0]);
 cookie('age[1]',$arr[1]);
 cookie('age[2]',$arr[2]);
 #$
 //修改cookie
 cookie('cookie名','新值',有效期);
 #$
 //获取cookie
 $_COOKIE('cookie名');
 #$
 //删除cookie
 //时间设为过去即可删除
 cookie('cookie名'，'',1);
 #$
 //SESSION操作
 //必须先开启SESSION机制，在html标签之前开启
 session_start();
 #$
 //SESSION保存在服务器硬盘中
 
 增:$_SESSION['key']='value';
 删:unset($_SESSION['key']);//只能删除内存中的
 删:$_SESSION=[];//删除所有内存中的
 session_destroy();//销毁硬盘中的文件和$_SESSION=[]配和使用
 改:$_SESSION['key']='new value';
 查:echo$_SESSION['key'];
 #$
 //设置编码
 header("Content-type:text/html;charset=utf-8");
 #$
 //引入文件
 include './php.php';
 #$
 //定义常量
 define("HOST",'localhost');
define("USER",'root');
define("PWD",'');
#$
//php操作MySQL数据库
1. 创建一个 mysqli 的对象
$_mysqli = newmysqli();
2. 连接 MySQL的主机、用户、密码、数据库
$_mysqli->connect( 'localhost' , 'root' , 'yangfan' , 'guest' );
3. 创建带连接参数的 mysqli对象
$_mysqli = newmysqli( 'localhost' , 'root' , 'yangfan' , 'guest' );
4. 单独选择数据库
$_mysqli->select_db( 'testguest' );
5. 断开 MySQL
$_mysqli->close();
#$
//mysql连接错误处理
二． 处理连接错误
如果无法连接 MySQL数据库，那么这个页面不太可能继续完成预期的工作。因此，一定要注意监视连接错误并相应地做出反应 。Mysqli 扩展包含有很多特性可以用来捕获错误信息，例如：mysqli_connect_errno() 和 mysqli_connect_error() 方法。
mysqli_connect_errno()函数返回连接数据库返回的错误号。
Mysqli_connect_error()函数返回连接数据库返回的错误代码。
if(mysqli_connect_errno()) {

echo' 数据库连接错误，错误信息： ' .mysqli_connect_error();

exit();

}

errno属性返回数据库操作时的错误号。
error属性返回数据库操作时的错误代码。
if( $_mysqli ->errno) {

echo' 数据库操作时发生错误，错误代码是： ' . $_mysqli ->error;

}
#$
//
三． 与数据库进行交互
绝大多数查询都与创建(Creation) 、获取 (Retrieval) 、更新 (Update) 和删除 (Deletion) 任务有关，这些任务统称为 CRUD 。
1. 获取数据
网页程序大多数工作都是在获取和格式化所请求的数据。为此，要向数据库发送SELECT查询，再对结果进行迭代处理，将各行输出给浏览器，并按照自己的要求输出。
// 设置一下编码 utf8

$_mysqli->set_charset( "utf8" );

// 创建一句 SQL 语句

$_sql = "SELECT* FROM t g_user" ;

// 执行 sql 语句把结果集赋给$_result

$_result = $_mysqli->query( $_sql );

// 将结果集的第一行输出

print_r( $_result->fetch_row());

// 释放查询内存 ( 销毁 )

$_result->free();

2. 解析查询结果
一旦执行了查询并准备好结果集 ，下面就可以解析获取到的结果行了 。 你可以使用多个方法来获取各行中的字段 ，具体选择哪一个方法主要取决于个人喜好 ， 因为只是引用字段的方法有所不同。
将结果集放到对象中
由于你可能会使用 mysqli的面向对象的语法 ， 所以完全可以采用面向对象的方式管理结果集。可以使用fetch_object() 方法来完成。
// 将结果集包装成对象
$_row = $_reslut->fetch_object();
// 输出对象中的一个字段（属性）
echo $_row->tg_username;
// 遍历所有的用户名称
while (!! $_row =$_reslut ->fetch_object()) {
echo$_row ->tg_username. ' <br /> ' ;
}
使用索引数组和关联数组
// 将结果集包装成数组 ( 索引 +关联 )
$_row = $_reslut->fetch_array();
// 输出下标是 3 的字段（属性）
echo $_row [ 3 ];
// 将结果集包装成索引数组
$_row = $_reslut->fetch_row();
echo $_row [ 3 ];
// 将结果集包装成关联数组
$_row = $_reslut->fetch_assoc();
echo $_row ['tg_username' ];
3. 确定所选择的行和受影响的行
通常希望能够确定 SELECT查询返回的行数 ， 或者受 INSERT 、 UPDATE 或 DELET 查询影响的行数。我们可以使用num_rows 和 affected_rows 两个属性
// 当使用查询时，想了解 SELECT查询了多少行，可以使用 num_rows 。
echo $_reslut->num_rows;
// 当使用查询时 ， 想了解SELECT 、 INSERT 、 UPDATE 、 DELETE 查询时影响的行数，可以使用affected_rows; 注意，它是 $_mysqli 下的属性
echo $_mysqli->affected_rows;
4. 移动指针的操作和获取字段
当你并不想从第一条数据开始获取 ，或者并不想从第一个字段获取 ， 你可以使用数据指针移动或者字段指针移动的方式调整到恰当的位置。 当然 ， 你还可以获取字段的名称及其相关的属性。
// 计算有多少条字段

echo $_reslut->field_count;

// 获取字段的名称

$_field = $_reslut->fetch_field();

echo $_field->name;

// 遍历字段

while (!! $_field =$_reslut ->fetch_field()) {

echo$_field ->name. '<br />' ;

}

// 一次性取得字段数组

print_r( $_reslut->fetch_fields());

// 移动数据指针

$_reslut->data_seek( 5 );

// 移动字段指针

$_reslut->field_seek( 2 );

5. 执行多条 SQL 语句
有的时候 ，我们需要在一张页面上同时执行多条 SQL 语句 ， 之前的方法就是分别创建多个结果集然后使用。但这样资源消耗很大，也不利于管理。PHP 提供了执行多条 SQL 语句的方法 $_mysqli->multi_query() ;
// 创建多条 SQL 语句

$_sql .="SELECT * FROM tg_user;" ;

$_sql .="SELECT * FROM tg_photo;" ;

$_sql .="SELECT * FROM tg_article" ;

// 开始执行多条 SQL 语句

if ( $_mysqli->multi_query( $_sql )) {

//开始获取第一条 SQL 语句的结果集

$_result= $_mysqli ->store_result();

print_r($_result ->fetch_array());

//将结果集指针移到下一个

$_mysqli->next_result();

$_result= $_mysqli ->store_result();

print_r($_result ->fetch_array());

$_mysqli->next_result();

$_result= $_mysqli ->store_result();

print_r($_result ->fetch_array());

} else {

echo'sql 语句有误！ ' ;

}

6. 执行数据库事务
事务 (transaction)是作为整个一个单元的一组有序的数据库操作 。 如果一组中的所有操作都成功 ， 则认为事务成功 ，即使只有一个失败操作 ， 事务也不成功 。 如果所有操作成功完成 ， 事务则提交 (commit) ，其修改将作用于所有其他数据库进程 。 如果一个操作失败 ， 则事务将回滚 (roll back)，该事务所有操作的影响都将取消。
首先 ， 您的 MySQL 是InnoDB 或 BDB 引擎的一种 ， 一般来说 ， 你安装了 AppServ �募砂� ， 你选择 InnoDB的引擎的数据库即可 。 如果你建立的表不是 InnoDB ， 可以在 phpmyadmin里修改。
// 首先你必须关闭自动提交数据

$_mysqli->autocommit( false );

// 创建一个 SQL 语句，必须同时运行成功，不能出现一个成功，一个失败

$_sql .="UPDATE tg_friend SET tg_state=tg_state+5 WHERE tg_id=1;" ;

$_sql .="UPDATE tg_flower SET tg_flower=tg_flower-5 WHERE tg_id=1;" ;

// 执行两条 SQL 语句

if ( $_mysqli->multi_query( $_sql )) {

//获取第一条 SQL 一影响的行数

$_success= $_mysqli ->affected_rows == 1 ? true : false ;

//下移，第二条 SQL

$_mysqli->next_result();

//获取第二条 SQL 影响的行数

$_success2 = $_mysqli ->affected_rows == 1 ? true : false ;

//判断是否都正常通过了，两个 SQL

if( $_success && $_success2 ) {

$_mysqli->commit();

echo' 完美提交！ ' ;

}else {

$_mysqli->rollback();

echo' 程序出现异常！ ' ;

}

}

} else {

echo"SQL 语句有误： " . $_mysqli ->errno. $_mysqli ->error;

}

// 最后还必须开启自动提交

$_mysqli->autocommit( true );

#$
//定义常量
define("HOST",'localhost');
define("USER",'root');
define("PWD",'');
#$
//注册

//注册信息判断
if(!preg_match('/^[\w\x80-\xff]{3,15}$/', $username)){
    exit('错误：用户名不符合规定。<a href="javascript:history.back(-1);">返回</a>');
}
if(strlen($password) < 6){
    exit('错误：密码长度不符合规定。<a href="javascript:history.back(-1);">返回</a>');
}
if(!preg_match('/^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$/', $email)){
    exit('错误：电子邮箱格式错误。<a href="javascript:history.back(-1);">返回</a>');
}
#$
//延时
sleep(5);
#$
//接收文件上传
//接受到文件信息为一个数组
/*
数组的key对应为：
name:文件名
type:文件类型
tmp_name:上传至服务器的临时文件目录
error:上传时候的错误信息，成功为0
size:文件大小(字节)
*/
$img=$_FILES["name"];
#$
//截取从指定字符至最后
strrchr("string","指定字符");
#$
//保存临时文件
move_uploaded_file(临时路径,保存到的路径);
//示例: $file_name=date('YmdHis').rand(100,999);//年月日时分秒随机数为文件名获取扩展名
 //通过文件名获取文件扩展名
$exe=strrchr($img["name"],".");
$file_name.=$exe;//拼接
move_uploaded_file($img["tmp_name"],./upfile/$file_name);//另存文件至新目录
#$
//php安全
//网站根目录用独立的二级域名
#$
//搜索数组中是否存在指定的值
//参数三可选：设置为TRUE时匹配类型完全一样
in_array("string",$数组,'TRUE');
/*示例:
$exe=strrchr($img["name"],".");//截取后缀名从.至最后
$arr=[".jpg",".gif",".png"];
$bool=in_array($exe,$arr);
#$
//获取字符串长度
strlen("string");
#$
//三目运算

<?php
$x = true;
$x ? $y = 5 : $y = 6;
//输出5
echo  $y;
?>
#$
//反引号执行命令
//显示本机ip
<?php
echo '<pre>';
echo `ipconfig`;
echo '</pre>';
?>
#$
//程序执行时间检测
<?php
//开始时间
$time_start = microtime(true);
//循环一万次
for($i = 0 ; $i < 10000 ; $i++){
//你可以用上，mktime() 生成一个昨天的时间
//再用strtotime() 生成一个昨天的时间
//对比两个函数认的效率高
}
//结整时间
$time_end = microtime(true);
//相减得到运行时间
$time = $time_end - $time_start;
echo "这个脚本执行的时间为 $time seconds\n";
?>
#$
//字符串中提取所有数字
//此函数里数字碰到其它字符都把数字分割为一个数组
function findNum($str=''){
$str=trim($str);
if(empty($str)){return '';}
//匹配数字的正则表达式
$reg='/\d+(\d+)?/is';
preg_match_all($reg,$str,$result);
if(is_array($result)&&!empty($result)&&!empty($result[0])&&!empty($result[1])){
	for($i=0;$i<count($result[0]);$i++){
		    $arr[]=$result[0][$i];
		    }
return $arr;
}
return '';
}//字符串中提取所有数字

#$
//截取两字符串之间内容
function getNeedBetween($str,$mark1(开始),$mark2(结束)){
$kw=$kw1;
$kw='123'.$kw.'123';
$st =stripos($kw,$mark1);
$ed =stripos($kw,$mark2);
if(($st==false||$ed==false)||$st>=$ed)
return 0;
$kw=substr($kw,($st+1),($ed-$st-1));
return $kw;
}//截取两字符串之间内容

#$
//curl抓取网页内容
$keyword='查找(计组实验)';
  //初始化
$curlobj = curl_init(); 
  //设置访问的url
curl_setopt($curlobj, CURLOPT_URL, "https://kjh.55128.cn/k/kjls/gpc-bjk3.html" );
 //执行后不直接打印出
 curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true); 

 //设置https 支持
 //使用cookies时，必须先设置时区  date_default_timezone_get('PRC');   
//终止从服务端验证
 curl_setopt($curlobj, CURLOPT_SSL_VERIFYPEER, 0);
 
 //执行获取内容
$output = curl_exec($curlobj);
curl_close($curlobj);//关闭curl

#$
//创建一个文件并写入内容
//创建一个文件
    $myfile = fopen('testfile.html', 'w');
    //将获取的网站内容保存到文件中
    echo $output;
    fwrite($myfile, $output);
    //关闭文件资源
    fclose($myfile);
    
 #$
//清除换行rn表示Linux和widows里软换行
//$haoma=str_replace(array("/r/n", "/r", "/n"),'',$haoma);

#$
//去除字符串中空格
$qishu=str_replace(" ",'',$qishu);
$haoma=str_replace(" ",'',$haoma);

#$
//






